home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / sbin / unconfined < prev    next >
Text File  |  2009-11-03  |  4KB  |  117 lines

  1. #!/usr/bin/perl -w
  2. #
  3. # $Id: unconfined 1352 2008-11-21 12:31:22Z jrjohansen $
  4. #
  5. # ----------------------------------------------------------------------
  6. #    Copyright (c) 2005 Novell, Inc. All Rights Reserved.
  7. #
  8. #    This program is free software; you can redistribute it and/or
  9. #    modify it under the terms of version 2 of the GNU General Public
  10. #    License as published by the Free Software Foundation.
  11. #
  12. #    This program is distributed in the hope that it will be useful,
  13. #    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. #    GNU General Public License for more details.
  16. #
  17. #    You should have received a copy of the GNU General Public License
  18. #    along with this program; if not, contact Novell, Inc.
  19. #
  20. #    To contact Novell about this file by physical or electronic mail,
  21. #    you may find current contact information at www.novell.com.
  22. # ----------------------------------------------------------------------
  23. #
  24. #  unconfined -
  25. #    audit local system for processes listening on network connections
  26. #    that are not currently running with a profile.
  27.  
  28. use strict;
  29. use Getopt::Long;
  30.  
  31. use Immunix::SubDomain;
  32. use Locale::gettext;
  33. use POSIX;
  34.  
  35. setlocale(LC_MESSAGES, "");
  36. textdomain("apparmor-utils");
  37.  
  38. # options variables
  39. my $paranoid = '';
  40. my $help     = '';
  41.  
  42. GetOptions(
  43.     'paranoid' => \$paranoid,
  44.     'help|h'   => \$help,
  45. );
  46.  
  47. # tell 'em how to use it...
  48. &usage && exit if $help;
  49.  
  50. sub usage {
  51.     printf(gettext("Usage: %s [ --paranoid ]\n"), $0);
  52.     exit 0;
  53. }
  54.  
  55. my $subdomainfs = check_for_subdomain();
  56.  
  57. die gettext("SubDomain does not appear to be started. Please enable SubDomain and try again.") . "\n"
  58.   unless $subdomainfs;
  59.  
  60. my @pids;
  61. if ($paranoid) {
  62.     opendir(PROC, "/proc") or die gettext("Can't read /proc\n");
  63.     @pids = grep { /^\d+$/ } readdir(PROC);
  64.     closedir(PROC);
  65. } else {
  66.     if (open(NETSTAT, "/bin/netstat -nlp |")) {
  67.         while (<NETSTAT>) {
  68.             chomp;
  69.             push @pids, $5
  70.               if /^(tcp|udp)\s+\d+\s+\d+\s+\S+\:(\d+)\s+\S+\:(\*|\d+)\s+(LISTEN|\s+)\s+(\d+)\/(\S+)/;
  71.         }
  72.         close(NETSTAT);
  73.     }
  74. }
  75.  
  76. for my $pid (sort { $a <=> $b } @pids) {
  77.     my $prog = readlink "/proc/$pid/exe" or next;
  78.     my $attr;
  79.     if (open(CURRENT, "/proc/$pid/attr/current")) {
  80.         while (<CURRENT>) {
  81.             chomp;
  82.             $attr = $_ if (/^\// || /^null/);
  83.         }
  84.         close(CURRENT);
  85.     }
  86.     my $cmdline = `cat /proc/$pid/cmdline`;
  87.     my $pname = (split(/\0/, $cmdline))[0];
  88.     if ($pname =~ /\// && !($pname eq $prog)) {
  89.     $pname = "($pname) ";
  90.     } else {
  91.     $pname = "";
  92.     }
  93.     if (not $attr) {
  94.         if ($prog =~ m/^(\/usr\/bin\/python|\/usr\/bin\/perl|\/bin\/bash)$/) {
  95.  
  96.             #my $scriptname = (split(/\0/, `cat /proc/$pid/cmdline`))[1];
  97.             $cmdline =~ s/\0/ /g;
  98.             $cmdline =~ s/\s+$//;
  99.             chomp $cmdline;
  100.             print "$pid $prog ($cmdline) " . gettext("not confined\n");
  101.         } else {
  102.             print "$pid $prog $pname" . gettext("not confined\n");
  103.         }
  104.     } else {
  105.         if ($prog =~ m/^(\/usr\/bin\/python|\/usr\/bin\/perl|\/bin\/bash)$/) {
  106.  
  107.             #my $scriptname = (split(/\0/, `cat /proc/$pid/cmdline`))[1];
  108.             $cmdline =~ s/\0/ /g;
  109.             $cmdline =~ s/\s+$//;
  110.             chomp $cmdline;
  111.             print "$pid $prog ($cmdline) " . gettext("confined by") . " '$attr'\n";
  112.         } else {
  113.             print "$pid $prog $pname" . gettext("confined by") . " '$attr'\n";
  114.         }
  115.     }
  116. }
  117.